---
sidebar_position: 3
---

# Рекомендации по разработке программы

Создание программы - процесс сложный, поэтому практически с любого этапа возможен возврат на предыдущие этапы для исправления ошибок или принятия других проектных решений. Чаще всего такого рода возвраты являются следствием ошибок, допущенных при разработке алгоритма.

Для уменьшения ошибок в алгоритмах программ при их разработке следует использовать метод пошаговой детализации.

При использовании данного метода разработку алгоритмов выполняют поэтапно. На первом этапе описывают решение поставленной задачи, выделяя подзадачи и считая их решенными. На следующем - аналогично описывают решение подзадач, формулируя уже подзадачи следующего уровня. Процесс продолжают до тех пор, пока не дойдут до подзадач, алгоритмы решения которых очевидны. При этом, описывая решение каждой задачи, желательно использовать не более одной-двух конструкций, таких как цикл или ветвление, чтобы четче представлять структуру программы.

## Шаг 1. Определяем общую структуру программы

Разбиение сложного алгоритма на подзадачи следует выполнять таким образом, чтобы каждая подзадача имела физический смысл и правильность ее выполнения можно было бы проверить, не выполняя последующие действия.

Ниже представлено словесное описание алгоритма:

1. Вводим и контролируем исходные данные `h`, `m`.
2. Если полученные данные не верны, то выдаем ошибку пользователю и прерываем выполнение.
3. Проверяем условие `h==12 && m==0`. Если `ИСТИНА`, то выводим `Полдень`. В противном случае идем дальше.
4. Проверяем условие `(h==24 || h==0) && m==0`. Если `ИСТИНА`, то выводим `Полночь`. В противном случае идем дальше.
5. Определяем времени суток.
6. Обрабатываем часы.
7. Обрабатываем минуты.
8. Выводим результат обработки часов и минут.

## Шаг 2. Детализируем операцию ввода и контроля исходных данных

После завершения разработки детального алгоритма первой подзадачи алгоритм следует закодировать, заменяя, если необходимо, неразработанные подзадачи "заглушками", выполнить и отладить. Например, для ввода и контроля исходных данных остальные действия не требуются и для отладки этого блока функции-заглушки не требуются. Функция-заглушка не выполняет никаких действий, а только печатает свое имя. Это позволит обнаружить и устранить возможные ошибки на ранней стадии их возникновения и существенно сократить общее время разработки программы.
Не следует сразу кодировать всю программу, так как в этом случае значительно сложнее обнаруживать и исправлять ошибки.

## Шаг 3. Детализируем подзадачу определения времени суток

Ее удобнее выполнить до обработки часов, так как при выводе результатов падежные окончания могут измениться. Например, вместо `15 часов` мы должны печатать `3 часа дня`. Это можно учесть, если запомнить значение времени суток (утра, дня, вечера, ночи) в переменной `p_txt` типа `char[20]` и выполнить операцию `h=h-12`, если `h>12`. Если порядок определения времени суток и обработки часов в предложенной на первом шаге схеме алгоритма был другим, его следует изменить, пока это не требует значительных затрат времени.

На четвертом и пятом шагах детализируем операции обработки часов и минут, запоминая результаты обработки в переменных типа `char[20] h_txt` и `char[20] m_txt` соответственно. Возможные значения `h_txt`: `час`, `часа`, `часов`. Возможные значения `m_txt`: `минута`, `минут`, `минуты`, `ровно`.

При выводе с помощью этих переменных формируется строка результата.

Таким образом, на каждом шаге решается одна достаточно простая задача, что существенно облегчает разработку алгоритма и является основным достоинством метода пошаговой детализации.

## Перед написанием кода

Перед написанием кода рекомендуется обратить внимание на картинку:

![Сколько времени](images/what-is-the-time.png)

Оригинал картинки в статье [Родительный падеж в русском языке. Когда и как использовать](https://burupo.com/ru/genitive-case-russian-functions-ru/).
